package com.ruoyi.wechart.core;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;



/**
 * 微信换心工具类
 * @auth
 * @date
 */
@Slf4j
@Component
public class WxCore {

    @Value("${wechart.wxAppid}")
    private String wxAppid;

    @Value("${wechart.wxSecret}")
    private String wxSecret;

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 用预登录code向微信换取openId
     * @param code
     * @return
     */
    public String getOpenId(String code) {
        try {
            // 定义向微信服务器换取openId的URL地址
            String url = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";

            // 使用参数替换URL变量中的占位符
            url = String.format(url,wxAppid,wxSecret,code);

            // 打印向微信服务器请求openId时的URL
            log.info("向微信服务器请求openId时的URL为: {}", url);

            // 向微信服务器发送请求，并获取返回内容
            String str = restTemplate.getForObject(url, String.class);

            // 打印从微信服务器接收到的返回内容
            log.info("向微信服务器请求openId时的返回内容: {}", str);

            // 解析返回的 JSON 字符串为 JSON 对象
            JSONObject obj =  (JSONObject) JSON.parse(str);

            // 从 JSON 对象中获取 openid 并返回
            return obj.getString("openid");
        } catch (Exception e) {
            // 记录错误日志
            log.error("用code({})向微信服务器换取openid失败", code, e);
            return "";
        }
    }

}
